package lambda;

/**
 * lambda 的 6种形式 及其 简化写法
 */
public class Lambda02 {
    public static void main(String[] args) {
        //1、无返回值多参
        LambdaNoneReturnMultipleParameter lambda1 = (a, b) -> {
            System.out.println("lambda1 is " + (a + b));
        };
        lambda1.test(1, 2);

        //2、无返回值一参
//        LambdaNoneReturnSingleParameter lambda2 = (a) ->{
//            System.out.println("lambda2 is "+ a);
//        };
        //精简  一个参数可以省略括号
        LambdaNoneReturnSingleParameter lambda2 = a -> {
            System.out.println("lambda2 is " + a);
        };
        lambda2.test(1);

        //3、无返回值无参
//        LambdaNoneReturnNoneParameter lambda3 = () -> {
//            System.out.println("lambda3 is no return and no param");
//        };
        //精简 方法体只有一条语句可以省略大括号
        LambdaNoneReturnNoneParameter lambda3 = () -> System.out.println("lambda3 is no return and no param");
        lambda3.test();

        //4、有返回值多参
        LambdaSingleReturnMultipleParameter lambda4 = (a, b) -> {
            return a + b;
        };
        int lambda4Return = lambda4.test(1, 2);
        System.out.println("lambda4 return is " + lambda4Return);

        //5、有返回值一参
//        LambdaSingleReturnSingleParameter lambda5 = (a) -> {
//            return a;
//        };
        LambdaSingleReturnSingleParameter lambda5 = a -> a;
        int lambda5Return = lambda5.test(1);
        System.out.println("lambda5 return is " + lambda5Return);

        //6、有返回值无参
//        LambdaSingleReturnNoneParamter lambda6 = () -> {
//            return 0;
//        };
        //精简 如果接口的唯一方法只有唯一返回语句，那么可以省略大括号，但是在省略大号的同时必须省略return
        LambdaSingleReturnNoneParamter lambda6 = () -> 0;
        int lambda6Return = lambda6.test();
        System.out.println("lambda6 return is " + lambda6Return);
    }
}

/**
 * 1、无返回值的多参接口
 */
@FunctionalInterface
interface LambdaNoneReturnMultipleParameter {
    void test(int a, int b);
}

/**
 * 2、无返回值一参接口
 */
@FunctionalInterface
interface LambdaNoneReturnSingleParameter {
    void test(int a);
}

/**
 * 3、无返回值无参接口
 */
@FunctionalInterface
interface LambdaNoneReturnNoneParameter {
    void test();
}

/**
 * 4、有返回值多参接口
 */
@FunctionalInterface
interface LambdaSingleReturnMultipleParameter {
    int test(int a, int b);
}

/**
 * 5、有返回值一参接口
 */
@FunctionalInterface
interface LambdaSingleReturnSingleParameter {
    int test(int a);
}

/**
 * 有返回值无参接口
 */
@FunctionalInterface
interface LambdaSingleReturnNoneParamter {
    int test();
}